<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
console.log(0.2+0.1) //0.1  -  +
//number String Boolean undefined Null  （typeof检测基本数据类型）
// Array object (引用数据类型) obj arr 以后new出来的那些东西 
console.log(typeof '234')
console.log(typeof (123))    //typeof两种写法

  
//递归  函数自己调自己  节省代码  ！避免死循环   
 //如果一个函数在内部自己调用自己本身，那么这个函数就是递归函数
 //递归的作用效果和循环一样，  (性能比循环低)
 
  // function fid(n) {
  //   if (n < 3) return n           //写出口避免死循环
  //   return fid(n - 1) + fid(n - 2)//这里是规律 
  // }
  // let n = fid(3)
  // console.log(n)
  //走台阶问题   斐不纳妾
  //3个台阶 3个方法儿 
  //从第三个数开始 就等于前两个数之和

//斐波那契额数列   前两个数之和=第三个数
        // function feibonaqie(n){
        //   if(n===1||n===2){
        //     return 1        //递归容易发生栈溢出错误 所有必须给推出条件
        //   }
        //   return feibonaqie(n-1)+feibonaqie(n-2)
        // }
        // console.log(feibonaqie(5))
//完成1到100 的累加 递归  
//100+99+98...+1   3+2+1  最后一次调用返回1
    function s(n){
	   if(n==1) return n
	   return n+s(n-1)
  }
  s(100)
  console.log(s(100))
 




  for (var i = 0; i < 10; i++) {
    setTimeout(function(){
         console.log(i);  //10个10
        })
      }

    for (let j = 0; j < 10; j++) {
    setTimeout(function(){
    console.log(j);  //123456789
    })
    }








//a在什么情况下， 可以输出这段字符串儿
//valueOf()函数用于返回指定对象的原始值。
var  a={
    i:1,
    valueOf:()=>{
        return a.i++
    }
}	
    //var a = ?
	if(a==1&&a==2&&a==3){
        //在这里条件成立
		console.log('没水，没电，没对象，没有钱')
	}


//封装函数 截取  空str前后的空白字符
    //js用正则写一个截取字符串前后的 空白字符  
    String.prototype.trim = function (){
      return this.replace(/^\s*|\s*s/g,'');
    }
    console.log('             asdf        asfd'.trim())
//封装函数 清除  str前后的空格(兼容所有的浏览器)
    String.prototype.trim= function(){
    return this.replace(/^\s+/,"").replace(/\s+$/,"");
  
 }
 




 //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
//filter用法  过滤

 　//例如，在一个Array中，删掉偶数，只保留奇数，可以这么写
        // var arr = [1, 2, 4, 5, 6, 9, 10, 15];
        // var r = arr.filter(function (x) {
        //     return x % 2 !== 0;
        // });
        // console.log(r) // [1, 5, 9, 15]




    //把一个Array中的空字符串删掉，可以这么写：
        //  var arr = ['A', '', 'B', null, undefined, 'C', '  '];
        //  var r = arr.filter(function (s) {
        //      return s && s.trim(); // 注意：IE9以下的版本没有trim()方法
        // });
        // console.log(r) // ['A', 'B', 'C']



    // 可以被2整除的
        // var arr3 = [1,2,1,12,2,2]
        // var rr = arr3.filter(function(item,index){
        //     return item%2==0
        // })
        // console.log(rr)


        
    //去掉数组中不符合项
        // var arr = [20,30,50, 96,50]
        // var newArr = arr.filter(i => i>40)  
        // console.log(newArr)  //50 96 50 




    //.数组去重
    // var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
    // var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index) 
    //                 //  (每一项，下标，原数组) 
    // console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]



    //去掉空数组空字符串、undefined、null
    //1
        // var arr = ['1','2',undefined, '3.jpg',undefined]
        // var newArr = arr.filter(item => item)
        // console.log(newArr)   // 1  2 3.jpg  
    //2
        // var arr = ['1','2',null, '3.jpg',null]
        // var newArr = arr.filter(item => item)
        // console.log(newArr)    // 1  2 3.jpg  
    //3
        //空字符串里面不能包含空格
        // var arr = ['1','2','', '3.jpg','']
        // var newArr = arr.filter(item => item)
        // console.log(newArr)   // 1  2 3.jpg  


    






</script>